#ifndef VBO_H
#define VBO_H

#include <ToolBox/vectorf.h>
#define GL3_PROTOTYPES 1
#include <GL3/gl3.h>
#include <vector>

class Vbo
{
    public:

    Vbo();
    void InitBuffers();

    int size;

    GLuint vertexBuffer;    /*!< Indice du buffer contenant les informations sur les sommets	*/
    GLuint colorBuffer;     /*!< Indice du buffer utilisé pour stocker les informations de couleurs des sommets	*/
    GLuint indexBuffer;     /*!< Indice du buffer contenant les informations sur l'indice du sommet à afficher	*/
    GLuint normalBuffer;    /*!< Indice du buffer utilisé pour stocker les informations concernant les normales des sommets	*/
    GLuint textureBuffer;   /*!< Indice du buffer utilisé pour stocker les informations concernant les indices de texture des sommets */
    GLuint pickingBuffer;   /*!< Indice du buffer utilisé pour stocker les informations concernant les couleurs du deuxieme affichage */

    unsigned int vertexCount;   /*!< Nombre de vertex dans le buffer */

    int dimensionVertex;    /*!< Nombre de coordoonnées utilisés pour représenter un sommet (compris en 1 et 4)	*/
    int dimensionColors;    /*!< Nombre de canaux utilisés pour représenter la couleur (entre 1 et 4)	*/
    int dimensionTexture;   /*!< Nombre dimension utilisés pour représenter la texture (entre 1 et 3)	*/

    unsigned char colorxp;
    unsigned char coloryp;
    unsigned char colorzp;

    /*!
     * 	\fn int SetVertex(int indiceVertex, Vectorf coordinates)
     * 	\brief Méthode permettant de modifier le contenu du buffer
     *
     * 	\param int indiceVertex : Indice du sommet à modifier
     * 	\param Vectorf coordinates : nouvelle coordoonées du sommet
     */

    int SetVertex(int indiceVertex, Vectorf coordinates);

    /*!
     * 	\fn Vectorf GetVertex(int indiceVertex)
     * 	\brief Méthode permettant récupérer les coordonnées d'un sommet
     *
     * 	\param int indiceVertex : Indice du sommet à récupérer
     */

    Vectorf GetVertex(int indiceVertex);

    std::vector<Vectorf *> GetVertex();


};

#endif // VBO_H
